package JVM;

import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Random;

/**
 *  垃圾回收--------------------------------------------------------
 *     回收算法：
 *         引用计数法:缺点循环引用不能判断
 *         标记清楚法:缺点清理后内存碎片化,效率低(会暂停下)
 *         标记压缩法:效率低
 *         复制算法:缺点存活对象少不适用,浪费一个to空间
 *
 *     垃圾收集器:
 *         串行
 *              -XX:+UseSerialGC (使用串行垃圾回收)  -XX:+PrintGCDetails (打印信息)  -Xms16m  -Xmx16m
 *              日志 有DefNew
 *         并行：执行会有停顿
 *              -XX:+UseParNewGC (使用并行垃圾回收)  -XX:+PrintGCDetails (打印信息)  -Xms16m  -Xmx16m
 *              日志 有ParNew
 *              -XX:+UseParallelGC (使用并行垃圾回收)  -XX:+PrintGCDetails (打印信息)  -Xms16m  -Xmx16m
 *         并发
 *              CMS垃圾收集器 回收老年代的(多步骤去收集)
 *         G1(最重要 JDK1.7开始)
 *              Young GC
 *              Mixed GC
 *
 *      GC的命令
 *      -XX:+UseParNewGC -XX:+PrintGCDetails -Xms16m -Xmx16m
 *      -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xmx256m -XX:+PrintGCDetails
 *      -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC
 *      -Xloggc:F://test//gc.log
 *
 * ‐XX:+PrintGC 输出GC日志
 * ‐XX:+PrintGCDetails 输出GC的详细日志
 * ‐XX:+PrintGCTimeStamps 输出GC的时间戳（以基准时间的形式）
 * ‐XX:+PrintGCDateStamps 输出GC的时间戳（以日期的形式，如 2013‐05‐
 * 04T21:53:59.234+0800）
 * ‐XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息
 * ‐Xloggc:../logs/gc.log 日志文件的输出路径
 *
 * 在线网址 https://gceasy.io 分析上面gc.log日志
 */
public class GcDemo1 {

    public static void main(String[] args) {
        List<Object> list=new ArrayList();
        Properties pro;
        while (true) {
            try {
                if(System.currentTimeMillis()%2==0){
                    list.clear();
                }else{
                    for(int i=0;i<=10000;i++){
                         pro =new Properties();
                        pro.put("key_"+i,"value_"+System.currentTimeMillis());
                        list.add(pro);
                    }
                }
                Thread.sleep(new Random().nextInt(100));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
